package high.concurrent.server;

import high.concurrent.model.OrderMessage;
import high.concurrent.request.CreateOrderRequest;
import high.concurrent.utils.JsonData;
import high.concurrent.vo.ProductOrderVO;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

public interface ProductOrderService {

    /**
     * 根据订单号查询订单信息
     * @param outTradeNo  订单号
     * @return
     */
    ProductOrderVO selectOrderByOutTradeNo(String outTradeNo);

    /**
     * 获取下单防重令牌token
     * @param accountId 用户id
     * @return
     */
    JsonData getOrderRepayToken(Long accountId);

    /**
     * 提交订单
     * @param createOrderRequest
     * @param request
     * @return
     */
    JsonData confirmOrder(CreateOrderRequest createOrderRequest, HttpServletRequest request);

    /**
     * 定时关单
     * @param orderMessage
     * @return
     */
    boolean checkProductTask(OrderMessage orderMessage);

    /**
     * 根据商家id查询订购单集合
     * @param businessId  商家id
     * @param page  当前页数
     * @param pageSize  每页数据量
     * @return
     */
    List<ProductOrderVO> selectOrderByBusinessId(Long businessId, Integer page, Integer pageSize);

    /**
     * 根据用户id查询订购单集合
     * @param page  当前页数
     * @param pageSize  每页数据量
     * @return
     */
    List<ProductOrderVO> selectOrderByUserId(Integer page, Integer pageSize);


    /**
     * 回调逻辑执行
     * @param productOrderVO
     */
    void returnRrlPath(ProductOrderVO productOrderVO);
}
